home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Vollversion / CamD / development / docs / camd.doc next >
Text File  |  2000-05-15  |  35KB  |  1,104 lines

  1. TABLE OF CONTENTS
  2.  
  3. camd.library/AddMidiLink
  4. camd.library/CloseMidiDevice
  5. camd.library/CreateMidi
  6. camd.library/DeleteMidi
  7. camd.library/EndClusterNotify
  8. camd.library/FindCluster
  9. camd.library/FindMidi
  10. camd.library/FlushMidi
  11. camd.library/GetMidi
  12. camd.library/GetMidiAttrsA
  13. camd.library/GetMidiErr
  14. camd.library/GetMidiLinkAttrsA
  15. camd.library/GetSysEx
  16. camd.library/LockCAMD
  17. camd.library/MidiLinkConnected
  18. camd.library/MidiMsgLen
  19. camd.library/MidiMsgType
  20. camd.library/NextCluster
  21. camd.library/NextClusterLink
  22. camd.library/NextMidi
  23. camd.library/NextMidiLink
  24. camd.library/OpenMidiDevice
  25. camd.library/ParseMidi
  26. camd.library/PutMidi
  27. camd.library/PutMidiMsg
  28. camd.library/PutSysEx
  29. camd.library/QuerySysEx
  30. camd.library/RemoveMidiLink
  31. camd.library/RethinkCAMD
  32. camd.library/SetMidiAttrs
  33. camd.library/SetMidiLinkAttrs
  34. camd.library/SkipSysEx
  35. camd.library/StartClusterNotify
  36. camd.library/UnlockCAMD
  37. camd.library/WaitMidi
  38. camd.library/AddMidiLink                               camd.library/AddMidiLink
  39.  
  40.    NAME
  41.        AddMidiLink -- Create a MidiLink to a MidiCluster.
  42.  
  43.    SYNOPSIS
  44.        struct MidiLink *AddMidiLinkA (struct MidiNode *mi, LONG type,
  45.                                                a0                d0
  46.                 struct TagItem *TagsList)
  47.                         a1
  48.  
  49.         struct MidiLink *AddMidiLink(struct MidiNode *mi, LONG type,
  50.                         Tag type1, ...)
  51.  
  52.    FUNCTION
  53.        Creates a MidiLink structure and connects it to a MidiCluster.
  54.  
  55.        The first form of the function expects a tag array pointer or NULL.
  56.        The second form permits the tag items to exist on the caller's
  57.        stack.  In both cases, the final tag item must be TAG_END.
  58.  
  59.    INPUTS
  60.         mi - MidiNode that the MidiLink should communicate through.
  61.  
  62.         type - Type of link, either MLTYPE_Receiver or MLTYPE_Sender.
  63.  
  64.        TagList   - optional pointer to tag array.  May be NULL.  For
  65.                    OS v1.3, there are restrictions on the tag array
  66.                    contents.  See NOTE below.
  67.  
  68.    TAGS
  69.         See SetMidiLinkAttrsA
  70.  
  71.    RESULTS
  72.        A pointer to a MidiLink structure on success or NULL on failure.
  73.        When FALSE is returned, an error code will be returned if a TagItem
  74.         with an ti_Tag of MLINK_ErrorCode was provided. The CME_ error code
  75.         will be put in the ti_Data field.
  76.  
  77.    NOTE
  78.        Under 1.3 only a restricted tag array may be passed into this
  79.        funciton. Specifically, the only special tag values that are
  80.        supported are TAG_END (or TAG_DONE) and TAG_IGNORE.  All others
  81.        (e.g. TAG_SKIP, TAG_MORE) are treated as TAG_END.  The full range of
  82.        TAG list operations are permitted under 2.0.
  83.  
  84.        This function MUST be called by a Process (not a Task).  It makes a
  85.        few DOS calls.
  86.  
  87.    EXAMPLES
  88.        ml = AddMidiLink (mi,MLTYPE_Receiver,
  89.                MLINK_Name, "app.in", MLINK_Location,"in.0", TAG_END);
  90.  
  91.        Creates a receive MidiLink named "app.in" to the MidiCluster named
  92.         "in.0", where all bytes are recevied through the MidiNide mi.
  93.  
  94.    SEE ALSO
  95.        RemoveMidiLinkA(), SetMidiLinkAttrs()
  96.        2.0 tag docs.
  97. camd.library/CloseMidiDevice                       camd.library/CloseMidiDevice
  98.  
  99.    NAME
  100.        CloseMidiDevice -- Close a MIDI device driver.
  101.  
  102.    SYNOPSIS
  103.        void CloseMidiDevice (struct MidiDeviceData *MidiDeviceData)
  104.                                          a0
  105.  
  106.    FUNCTION
  107.        Closes a MIDI device driver opened by OpenMidiDevice().
  108.  
  109.    INPUTS
  110.        MidiDeviceData - pointer to a MidiDeviceData structure returned by
  111.                     OpenMidiDevice().
  112.  
  113.    RESULTS
  114.        None
  115.  
  116.    SEE ALSO
  117.        OpenMidiDevice()
  118. camd.library/CreateMidi                                 camd.library/CreateMidi
  119.  
  120.    NAME
  121.        CreateMidi -- Create a MidiNode.
  122.  
  123.    SYNOPSIS
  124.        struct MidiNode *CreateMidiA (struct TagItem *TagsList)
  125.                                                a0
  126.  
  127.        struct MidiNode *CreateMidi (Tag tag1, ...)
  128.  
  129.    FUNCTION
  130.        Creates a MidiNode structure with the desired attributes.
  131.  
  132.        The first form of the function expects a tag array pointer or NULL.
  133.        The second form permits the tag items to exist on the caller's
  134.        stack.  In both cases, the final tag item must be TAG_END.
  135.  
  136.    INPUTS
  137.        TagList   - optional pointer to tag array.  May be NULL.  For
  138.                    OS v1.3, there are restrictions on the tag array
  139.                    contents.  See NOTE below.
  140.  
  141.    TAGS
  142.             See SetMidiAttrsA
  143.  
  144.    RESULTS
  145.        A pointer to a MidiNode structure on success or NULL on failure.
  146.        When FALSE is returned, an error code will be returned if a TagItem
  147.         with an ti_Tag of MIDI_ErrorCode was provided. The CME_ error code
  148.         will be put in the ti_Data field.
  149.  
  150.    NOTE
  151.        Under 1.3 only a restricted tag array may be passed into this
  152.        funciton. Specifically, the only special tag values that are
  153.        supported are TAG_END (or TAG_DONE) and TAG_IGNORE.  All others
  154.        (e.g. TAG_SKIP, TAG_MORE) are treated as TAG_END.  The full range of
  155.        TAG list operations are permitted under 2.0.
  156.  
  157.        This function MUST be called by a Process (not a Task).  It makes a
  158.        few DOS calls.
  159.  
  160.        Don't call WaitMidi() with a send-only MidiNode.
  161.  
  162.    EXAMPLES
  163.        mi = CreateMidi (
  164.                MIDI_MsgQueue, 2048, MIDI_SysExSize, 10000L, TAG_END);
  165.  
  166.        Creates a MidiNode with space to receive 2048 MidiMsg's and 10000
  167.        bytes of Sys/Ex data.  Note the 'L' on the end of 10000.  This
  168.        forces correct alignment of the tag items on the stack for 16 bit
  169.        integer compilation.
  170.  
  171.    SEE ALSO
  172.        DeleteMidi(), SetMidiAttrs()
  173.        2.0 tag docs.
  174. camd.library/DeleteMidi                                 camd.library/DeleteMidi
  175.  
  176.    NAME
  177.        DeleteMidi -- Delete a MidiNode.
  178.  
  179.    SYNOPSIS
  180.        void DeleteMidi (struct MidiNode *mn)
  181.                                a0
  182.  
  183.    FUNCTION
  184.        Deletes the specified MidiNode.  A sys/ex queue allocated by
  185.        CreateMidi() is freed.  The following actions are automatically
  186.        performed by this function:
  187.  
  188.        A client-supplied sys/ex queue attached with SetSysExQueue() will
  189.        not be freed by this function.
  190.  
  191.    INPUTS
  192.        mn - MidiNode to delete. Can be NULL.
  193.  
  194.    RESULTS
  195.        None
  196.  
  197.    SEE ALSO
  198.        CreateMidi(), ClearSysExQueue()
  199. camd.library/EndClusterNotify                     camd.library/EndClusterNotify
  200.  
  201.    NAME
  202.        EndClusterNotify -- Stop notification of cluster changes
  203.  
  204.    SYNOPSIS
  205.        void EndClusterNotify (struct ClusterNotifyNode *cn)
  206.                                        a0
  207.  
  208.    FUNCTION
  209.        Terminates notification of CAMD internal state changes
  210.  
  211.    INPUTS
  212.        cn - a pointer to a ClusterNotifyNode
  213.  
  214.    RESULTS
  215.        None
  216.  
  217.    SEE ALSO
  218.        StartClusterNotify
  219. camd.library/FindCluster                               camd.library/FindCluster
  220.  
  221.    NAME
  222.        FindCluster -- Find a MidiCluster by name
  223.  
  224.    SYNOPSIS
  225.        struct MidiCluster *FindCluster (name)
  226.                                   a0
  227.  
  228.    FUNCTION
  229.        Find a MidiCluster by name. If node of that exists, the function
  230.        returns NULL. Midi links (CD_Linkages) must be locked when called.
  231.  
  232.    INPUTS
  233.        name - name of MidiCluster to find.
  234.  
  235.    RESULTS
  236.        result - A MidiCluster or NULL.
  237.  
  238. camd.library/FindMidi                                     camd.library/FindMidi
  239.  
  240.    NAME
  241.        FindMidi -- Find a MidiNode by name
  242.  
  243.    SYNOPSIS
  244.        struct MidiNode *FindMidi (name)
  245.                                   a0
  246.  
  247.    FUNCTION
  248.        Find a MidiNode by name. If node of that exists, the function
  249.        returns NULL. Midi links (CD_Linkages) must be locked when called.
  250.  
  251.    INPUTS
  252.        name - name of MidiNode to find.
  253.  
  254.    RESULTS
  255.        result - A MidiNode or NULL.
  256.  
  257. camd.library/FlushMidi                                   camd.library/FlushMidi
  258.  
  259.    NAME
  260.        FlushMidi -- Dispose of all pending messages.
  261.  
  262.    SYNOPSIS
  263.        void FlushMidi (struct MidiNode *mi)
  264.                                a0
  265.  
  266.    FUNCTION
  267.        Disposes of all messages waiting to be received by GetMidi() and
  268.        GetSysEx().  Also clears pending errors.
  269.  
  270.    INPUTS
  271.        mi - MidiNode to flush.
  272.  
  273.    RESULTS
  274.        None
  275. camd.library/GetMidi                                       camd.library/GetMidi
  276.  
  277.    NAME
  278.        GetMidi -- Get next MidiMsg from buffer.
  279.  
  280.    SYNOPSIS
  281.        BOOL GetMidi (struct MidiNode *mn, MidiMsg *msg)
  282.                              a0                 a1
  283.  
  284.    FUNCTION
  285.        Gets the next MidiMsg from mn->MsgQueue.
  286.  
  287.        It is definitely not safe to call this if there's no MsgQueue.
  288.  
  289.    INPUTS
  290.        mn - pointer to MidiNode.
  291.        msg - pointer to buffer to place MidiMsg removed from
  292.          queue.
  293.  
  294.    RESULTS
  295.        TRUE if a MidiMsg was actually copied in msg.  FALSE
  296.        if the buffer was empty.
  297.  
  298.    SEE ALSO
  299.        WaitMidi()
  300. camd.library/GetMidiAttrsA                           camd.library/GetMidiAttrsA
  301.  
  302.    NAME
  303.        GetMidiAttrsA -- Get the attributes of a MidiNode
  304.  
  305.    SYNOPSIS
  306.        ULONG GetMidiAttrsA (struct MidiNode *mi, struct TagItem *attrs)
  307.                                        a0          a1
  308.    FUNCTION
  309.        Gets attributes of a MidiNode.
  310.  
  311.    INPUTS
  312.        mi - a pointer to the MidiNode
  313.  
  314.        attrs - Attributes to get, terminated with TAG_DONE. For each entry
  315.             in the tag list, ti_Tag identifies the attribute, and ti_Data
  316.             is a pointer to the long variable where you wish the result
  317.             to be stored.
  318.  
  319.    RESULTS
  320.         Count of attributes understood.
  321.  
  322.    NOTE
  323.         See SetMidiAttrs() for tags understood.o
  324.  
  325.    EXAMPLES
  326.  
  327.    SEE ALSO
  328.        SetMidiAttrs()
  329. camd.library/GetMidiErr                                 camd.library/GetMidiErr
  330.  
  331.    NAME
  332.        GetMidiErr -- Read accumulated MIDI error flags.
  333.  
  334.    SYNOPSIS
  335.        UBYTE GetMidiErr (struct MidiNode *mn)
  336.                                  a0
  337.  
  338.    FUNCTION
  339.        Returns the current MIDI error flags from the MidiNode.  The error
  340.        flags are cleared after reading.  Some error flags, such as
  341.        CMEF_BufferFull, prevent additional MIDI reception and must be
  342.        cleared in order to restart MIDI reception.
  343.  
  344.        Only bits enabled by SetMidiErrFilter() are returned as 1 bits.
  345.  
  346.    INPUTS
  347.        mn - MidiNode to check.
  348.  
  349.    RESULTS
  350.        CMEF_ error flags or 0 if no errors were present.  The upper 24 bits
  351.        are cleared for the caller's convenience.
  352.  
  353.    SEE ALSO
  354.        SetMidiErrFilter(), WaitMidi()
  355. camd.library/GetMidiLinkAttrsA                   camd.library/GetMidiLinkAttrsA
  356.  
  357.    NAME
  358.        GetMidiLinkAttrsA -- Get attributes of a MidiLink
  359.  
  360.    SYNOPSIS
  361.        ULONG GetMidiLinkAttrsA (struct MidiLink *ml, struct TagItem *attrs)
  362.                                        a0             a1
  363.  
  364.    FUNCTION
  365.        Gets an attribute of a MidiLink.
  366.  
  367.    INPUTS
  368.        mi - a pointer to the MidiLink
  369.  
  370.        attrs - Attributes to get, terminated with TAG_DONE. For each entry
  371.             in the tag list, ti_Tag identifies the attribute, and ti_Data
  372.             is a pointer to the long variable where you wish the result
  373.             to be stored.
  374.  
  375.    RESULTS
  376.         Count of attributes understood.
  377.  
  378.    NOTE
  379.         See SetMidiLinkAttrs() for tags understood.o
  380.  
  381.    EXAMPLES
  382.  
  383.    SEE ALSO
  384.        SetMidiLinkAttrs()
  385. camd.library/GetSysEx                                     camd.library/GetSysEx
  386.  
  387.    NAME
  388.        GetSysEx -- Read bytes from Sys/Ex buffer.
  389.  
  390.    SYNOPSIS
  391.        ULONG GetSysEx (struct MidiNode *mn, UBYTE *Buf, ULONG Len)
  392.                               a0              a1          d0
  393.  
  394.    FUNCTION
  395.        Reads bytes from the Sys/Ex buffer for the current sys/ex message
  396.        into the supplied buffer.  This function will not read past the end
  397.        of the current sys/ex message.  The actual number of bytes read is
  398.        returned.  0 is returned when there are no more bytes to be read for
  399.        the current sys/ex message.  If the current message is not a sys/ex
  400.        message, this function will return 0.
  401.  
  402.    INPUTS
  403.        mn      - Pointer to MidiNode.
  404.        Buf - Output buffer pointer.
  405.        Len - Max number of bytes to read.
  406.  
  407.    RESULTS
  408.        Actual number of bytes read.
  409.  
  410.    SEE ALSO
  411.        GetMidi(), SkipSysEx(), QuerySysEx()
  412. camd.library/LockCAMD                                     camd.library/LockCAMD
  413.  
  414.    NAME
  415.        LockCAMD -- Prevent other tasks from changing internal structures
  416.  
  417.    SYNOPSIS
  418.        LockCAMD(locktype)
  419.                 d0
  420.        APTR LockCAMD( ULONG );
  421.  
  422.    FUNCTION
  423.        This routine will lock the internal sempahores in the CAMD library.
  424.        If they are already locked by another task, this routine will wait
  425.         until they are free.
  426.  
  427.    INPUTS
  428.        locktype -- which internal list will be locked.
  429.          CL_LINKS -- locks the internal list of MidiInterfaces, MidiLinks
  430.              and MidiClusters. Any functions that create or delete
  431.              these structures (including SetMidiLinkAttrs) will be locked.
  432.  
  433.    RESULT
  434.        If locktype is valid, returns a value that must be passed later
  435.         to UnlockCAMD.
  436.  
  437.    EXAMPLE
  438.  
  439.    NOTES
  440.  
  441.    BUGS
  442.  
  443.    SEE ALSO
  444.        UnlockCAMD(), CreateMidi(), DeleteMidi(),
  445.                AddLink(), RemoveMidiLink(), SetMidiLinkAttrs();
  446.  
  447. camd.library/MidiLinkConnected                   camd.library/MidiLinkConnected
  448.  
  449.    NAME
  450.        MidiLinkConnected -- Determine if MidiLink has a connection
  451.  
  452.    SYNOPSIS
  453.        BOOL MidiLinkConnected (struct MidiLink *ml)
  454.                                       a0
  455.  
  456.    FUNCTION
  457.        Returns TRUE if a MidiLink can currently send or receive to anyone.
  458.         For a MidiLink of type MLTYPE_Sender, then there must be at least
  459.         one MidiLink of type MLTYPE_Receiver linked to the same MidiCluster,
  460.         and visa versa.
  461.  
  462.    INPUTS
  463.        ml - MidiLink to check
  464.  
  465.    RESULTS
  466.        result - TRUE if there is a connection, FALSE otherwise
  467.  
  468. camd.library/MidiMsgLen                                 camd.library/MidiMsgLen
  469.  
  470.    NAME
  471.        MidiMsgLen -- Determine the length of a MIDI message
  472.  
  473.    SYNOPSIS
  474.        WORD MidiMsgLen (ULONG StatusByte)
  475.                           d0
  476.  
  477.    FUNCTION
  478.        Returns the length in bytes of the MIDI message described by the
  479.        supplied status byte.  The message length includes the status byte.
  480.  
  481.    INPUTS
  482.        StatusByte - UBYTE containing status byte.
  483.  
  484.    RESULTS
  485.        length - length of the message in bytes.  For valid messages this
  486.             will be at least 1.  0 is returned for invalid messages,
  487.             MS_SysEx and MS_EOX.
  488.  
  489.             The result is sign extended to 32 bits for assembly
  490.             programmers.
  491.  
  492.    SEE ALSO
  493.        MidiMsgType()
  494. camd.library/MidiMsgType                               camd.library/MidiMsgType
  495.  
  496.    NAME
  497.        MidiMsgType -- Determine the type of a MIDI message
  498.  
  499.    SYNOPSIS
  500.        WORD MidiMsgType (MidiMsg *Msg)
  501.                           a0
  502.  
  503.    FUNCTION
  504.        Returns a type bit number (CMB_) for supplied MidiMsg.
  505.  
  506.    INPUTS
  507.        Msg - Pointer to a MidiMsg.
  508.  
  509.    RESULTS
  510.        CMB_ bit number of message type.  -1 if message is undefined.  Also
  511.        -1 is returned for MS_EOX since it's not legal to be passed through
  512.        PutMidi().  The result is sign extended to 32 bits for assembly
  513.        programmers.
  514.  
  515.    SEE ALSO
  516.        MidiMsgLen()
  517. camd.library/NextCluster                               camd.library/NextCluster
  518.  
  519.    NAME
  520.        NextCluster -- Get next MidiCluster
  521.  
  522.    SYNOPSIS
  523.        struct MidiCluster *NextCluster (struct MidiCluster *last)
  524.                                                   a0
  525.  
  526.    FUNCTION
  527.        Returns the next MidiCluster on CAMD MidiCluster list. If last
  528.         is NULL, returns the first MidiCluster. Returns NULL if no more
  529.         MidiClusters. Midi links (CD_Linkages) must be locked when called.
  530.  
  531.    INPUTS
  532.        last - previous MidiCluster or NULL to get first MidiCluster
  533.  
  534.    RESULTS
  535.        next - next MidiCluster or NULL
  536.  
  537. camd.library/NextClusterLink                       camd.library/NextClusterLink
  538.  
  539.    NAME
  540.        NextClusterLink -- Get next MidiLink of one type in a MidiCluster
  541.  
  542.    SYNOPSIS
  543.        struct MidiLink *NextClusterLink (struct MidiCluster *mc,
  544.                                                   a0
  545.                         struct MidiLink *last, LONG type)
  546.                                 a1                d0
  547.  
  548.    FUNCTION
  549.        Returns the next MidiLink of a particular type a MidiCluster's list
  550.         of MidiLinks. If last is NULL, returns the first MidiLink. Returns
  551.         NULL if no more MidiLinks. Midi links (CD_Linkages) must be locked
  552.         when called.
  553.  
  554.    INPUTS
  555.        last - previous MidiLink or NULL to get first MidiLink
  556.  
  557.    RESULTS
  558.        next - next MidiLink or NULL
  559.  
  560. camd.library/NextMidi                                     camd.library/NextMidi
  561.  
  562.    NAME
  563.        NextMidi -- Get next MidiNode
  564.  
  565.    SYNOPSIS
  566.        struct MidiNode *NextMidi (struct MidiNode *last)
  567.                                   a0
  568.  
  569.    FUNCTION
  570.        Returns the next MidiNode on CAMD MidiNode list. If last is NULL,
  571.         returns the first MidiNode. Returns NULL if no more MidiNodes.
  572.         Midi links (CD_Linkages) must be locked when called.
  573.  
  574.    INPUTS
  575.        last - previous MidiNode or NULL to get first MidiNode
  576.  
  577.    RESULTS
  578.        next - next MidiNode or NULL
  579.  
  580. camd.library/NextMidiLink                             camd.library/NextMidiLink
  581.  
  582.    NAME
  583.        NextMidiLink -- Get next MidiLink of one type in a MidiNode
  584.  
  585.    SYNOPSIS
  586.        struct MidiLink *NextMidiLink (struct MidiNode *mi,
  587.                                                   a0
  588.                         struct MidiLink *last, LONG type)
  589.                                 a1                d0
  590.  
  591.    FUNCTION
  592.        Returns the next MidiLink of a particular type a MidiNode's list
  593.         of MidiLinks. If last is NULL, returns the first MidiLink. Returns
  594.         NULL if no more MidiLinks. Midi links (CD_Linkages) must be locked
  595.         when called.
  596.  
  597.    INPUTS
  598.        last - previous MidiLink or NULL to get first MidiLink
  599.  
  600.    RESULTS
  601.        next - next MidiLink or NULL
  602.  
  603. camd.library/OpenMidiDevice                         camd.library/OpenMidiDevice
  604.  
  605.    NAME
  606.        OpenMidiDevice -- Open a MIDI device driver.
  607.  
  608.    SYNOPSIS
  609.        struct MidiDeviceData *OpenMidiDevice (UBYTE *Name)
  610.                                                 a0
  611.  
  612.    FUNCTION
  613.        Opens a MIDI device driver.
  614.  
  615.        This function should only be called by Preferences program that
  616.        wishes to interrogate a particular MIDI device driver for such
  617.        information as number of Ports.
  618.  
  619.        Otherwise this is a private camd.library function.
  620.  
  621.    INPUTS
  622.        Name - name of MIDI device driver.
  623.  
  624.    RESULTS
  625.        Pointer to MidiDeviceData structure or NULL on failure.
  626.  
  627.    SEE ALSO
  628.        CloseMidiDevice()
  629. camd.library/ParseMidi                                   camd.library/ParseMidi
  630.  
  631.    NAME
  632.        ParseMidi -- Parse a stream of bytes as MIDI messages.
  633.  
  634.    SYNOPSIS
  635.        void ParseMidi (struct MidiLink *ml, cosnt UBYTE *Buffer,
  636.                              a0                 a1
  637.  
  638.                    ULONG Length)
  639.                          d0
  640.  
  641.    FUNCTION
  642.        Parses an unformated stream of bytes as MIDI data and transmits the
  643.        resulting messages to mi->SendPort.
  644.  
  645.        AddMidiParser() must be called prior to calling ParseMidi() in order
  646.        to attach the necessary parser data to the MidiLink.
  647.  
  648.    INPUTS
  649.        mi         - a MidiLink to send on.
  650.        Buffer - Pointer to buffer containing MIDI data to send.
  651.        Length - Number of bytes in buffer to send.
  652.  
  653.    RESULTS
  654.        None
  655.  
  656.    SEE ALSO
  657.        AddMidiParser()
  658. camd.library/PutMidi                                       camd.library/PutMidi
  659.  
  660.    NAME
  661.        PutMidi -- Send a MidiMsg to an output link
  662.  
  663.    SYNOPSIS
  664.        void PutMidi (struct MidiLink *link, ULONG Msg)
  665.                        a0                  d0
  666.  
  667.    FUNCTION
  668.        Sends the a MidiMsg to the output link specified.
  669.        The message is automatically timestamped.
  670.  
  671.    INPUTS
  672.        Msg - mm_Msg long word component of a MidiMsg.
  673.  
  674.    RESULTS
  675.        None
  676.  
  677.    NOTE
  678.        Although this function doesn't require a MidiNode pointer, the
  679.        caller must have allocated a MidiNode using CreateMidi() in
  680.        order for any messages to be distributed.
  681.  
  682.    SEE ALSO
  683.        PutMidi()
  684. camd.library/PutMidiMsg                                 camd.library/PutMidiMsg
  685.  
  686.    NAME
  687.        PutMidiMsg (MACRO) -- Send a MidiMsg.
  688.  
  689.    SYNOPSIS
  690.        void PutMidiMsg (struct MidiLink *ml, MidiMsg *msg)
  691.                             a0                 a1
  692.  
  693.    FUNCTION
  694.        Sends a MidiMsg. This is a macro that calls PutMidi().
  695.        The value in msg->mm_Port is ignored.
  696.        This macro exists in both C and Assembly.
  697.  
  698.    INPUTS
  699.        ml      - pointer to MidiLink.
  700.        msg - pointer to a MidiMsg to send.  Only the mm_Msg segment is
  701.          used.
  702.  
  703.    RESULTS
  704.        None
  705.  
  706.    SEE ALSO
  707.        GetMidi(), PutMidi()
  708. camd.library/PutSysEx                                     camd.library/PutSysEx
  709.  
  710.    NAME
  711.        PutSysEx -- Send a Sys/Ex Message to a link.
  712.  
  713.    SYNOPSIS
  714.        void PutSysEx (struct MidiLink *ml, UBYTE *Buffer)
  715.                               a0          a1
  716.  
  717.    FUNCTION
  718.        Sends the sys/ex message to the specified port.
  719.  
  720.        Sys/Ex messages are sent to hardware units regardless of transmit
  721.         buffer size.  Distribution pauses until the entire sys/ex message
  722.         is placedin the transmit queue.
  723.  
  724.        Distribution to MidiNodes is a bit different.  If the sys/ex message
  725.        is greater than the MidiNode's sys/ex buffer, then the message will
  726.        not be sent to the MidiNode.  If the message is smaller than the
  727.         MidiNode's sys/ex buffer, but there's not enough room left in the
  728.         buffer to contain the sys/ex message, CMEF_SysExFull will be sent
  729.         to the MidiNode. Otherwise the sys/ex message will be sent.
  730.  
  731.    INPUTS
  732.        ml     - MidiLink to send Sys/Ex to
  733.        Buffer - Pointer to a Sys/Ex message beginning with MS_SysEx and
  734.             ending with MS_EOX.
  735.  
  736.    RESULTS
  737.        None
  738.  
  739.    NOTE
  740.        Although this function doesn't require a MidiNode pointer, the
  741.        caller must have allocated a MidiNode using CreateMidi() in
  742.        order for any messages to be distributed.
  743.  
  744.    SEE ALSO
  745.        PutSysEx()
  746. camd.library/QuerySysEx                                 camd.library/QuerySysEx
  747.  
  748.    NAME
  749.        QuerySysEx -- Get number of bytes remaining in current Sys/Ex
  750.                  message.
  751.  
  752.    SYNOPSIS
  753.        ULONG QuerySysEx (struct MidiNode *mn)
  754.                                 a0
  755.  
  756.    FUNCTION
  757.        Returns the number of bytes remaining in the current sys/ex message.
  758.  
  759.    INPUTS
  760.        mn - pointer to MidiNode
  761.  
  762.    RESULTS
  763.        Remaining bytes in sys/ex message.      0 is returned if the last
  764.        message read from GetMidi() wasn't a sys/ex message.
  765.  
  766.    SEE ALSO
  767.        GetSysEx(), GetMidi()
  768. camd.library/RemoveMidiLink                         camd.library/RemoveMidiLink
  769.  
  770.    NAME
  771.        RemoveMidiLink -- Removes a MidiLink from a MidiCluster.
  772.  
  773.    SYNOPSIS
  774.        void RemoveMidiLink (struct MidiLink *ml)
  775.                                   a0
  776.    FUNCTION
  777.        Removes a MidiLink structure from a MidiCluster.
  778.  
  779.    INPUTS
  780.         ml - MidiLink to remove. Can be NULL.
  781.  
  782.    SEE ALSO
  783.        AddMidiLinkA()
  784. camd.library/RethinkCAMD                               camd.library/RethinkCAMD
  785.  
  786.    NAME
  787.        RethinkCAMD -- Force CAMD library to reload MIDI preferences
  788.  
  789.    SYNOPSIS
  790.        LONG RethinkCAMD(void)
  791.  
  792.    FUNCTION
  793.        Forces CAMD library to reload MIDI preferences and reassign the
  794.         hardware unit MidiLinks.
  795.  
  796.    RESULTS
  797.        result - 0 if everything went OK, else returns a CME_ error code
  798.  
  799. camd.library/SetMidiAttrs                             camd.library/SetMidiAttrs
  800.  
  801.    NAME
  802.        SetMidiAttrs -- Set the attributes of a MidiNode
  803.  
  804.    SYNOPSIS
  805.        BOOL SetMidiAttrsA (struct MidiNode *mi, struct TagItem *tags)
  806.                                        a0          a1
  807.  
  808.        BOOL SetMidiAttrs (struct MidiNode *mi, ...)
  809.  
  810.    FUNCTION
  811.        Sets the attributes of a MidiNode, using a Tag List.
  812.  
  813.        The first form of the function expects a tag array pointer or NULL.
  814.        The second form permits the tag items to exist on the caller's
  815.        stack.  In both cases, the final tag item must be TAG_END.
  816.  
  817.    INPUTS
  818.        mi - a pointer to the MidiNode
  819.  
  820.        TagList   - optional pointer to tag array.  May be NULL.  For
  821.                    OS v1.3, there are restrictions on the tag array
  822.                    contents.  See NOTE below.
  823.  
  824.    TAGS
  825.          MIDI_Name         STRPTR - ti_Data points to the new name of
  826.                                the node (generally the Application name)
  827.  
  828.          MIDI_SignalTask   struct Task * - the task to be signaled whenever
  829.                    a MidiMsg or Participant change occurs. This is set
  830.                    by CreateMidi to the current task as a default
  831.  
  832.          MIDI_RecvHook     struct Hook * - this hook will be called when
  833.                    new MidiMsgs arrive, if the buffer was empty. If the buffer
  834.                    was not yet empty, then it is simply added onto the end.
  835.  
  836.          MIDI_PartHook     struct Hook * - this hook will be called whenever
  837.                    any of the clusters that this node is linked to either
  838.                    adds or removes a member.
  839.  
  840.          MIDI_RecvSignal   BYTE - the signal to send whenever an incoming
  841.                    MidiMsg arrives in the buffer, or -1 to send no signal
  842.  
  843.          MIDI_PartSignal   BYTE - the signal to send whenever a cluster
  844.                    to which this node is linked has a participant change,
  845.                    or -1 to send no signal
  846.  
  847.          MIDI_MsgQueue     ULONG - ti_Data specifies the size of the
  848.                    MsgQueue for this MidiNode. An additional pad MidiMsg
  849.                    is allocated for overflow protection. It can also be
  850.                    set to zero to indicate that no buffer should be allocated
  851.                    (A send-only MidiNode)
  852.  
  853.          MIDI_SysExSize   ULONG - ti_Data specifies the size of the SysExQueue
  854.                    in bytes. Like the MsgQueue, an additional byte is
  855.                    allocated to allow for overflow protection.
  856.  
  857.          MIDI_TimeStamp   ULONG * - if non-NULL, ti_Data is a pointer to
  858.                    a longword which is to be used as the source for time
  859.                    stamps of incoming MidiMsgs for this MidiNode. It is
  860.                    assumed that the longword pointed to will be updated by
  861.                    some other mechanism -- for example, the longword could
  862.                    point to one of the fields in a PlayerInfo structure.
  863.  
  864.          MIDI_ErrFilter   UWORD - specified the ErrFilter for this MidiNode
  865.  
  866.          MIDI_ClientType  UWORD - specified the Client Type for this MidiNode
  867.                    See camd.h for more detail.
  868.  
  869.          MIDI_Image       struct Image * - pointer to an Intuition Image
  870.                    structure representing a glyph or icon that is symbolic
  871.                    if this application. Will be used for a future "patch
  872.                    bay" application. It is suggested that images be
  873.                    approximately 32 wide x 32 high, for consistency.
  874.  
  875.    RESULTS
  876.        TRUE if all changes were made successfully or FALSE on failure.
  877.        When FALSE is returned, an error code will be returned if a TagItem
  878.         with an ti_Tag of MIDI_ErrorCode was provided. The CME_ error code
  879.         will be put in the ti_Data field.
  880.  
  881.    NOTE
  882.        Under 1.3 only a restricted tag array may be passed into this
  883.        funciton. Specifically, the only special tag values that are
  884.        supported are TAG_END (or TAG_DONE) and TAG_IGNORE.  All others
  885.        (e.g. TAG_SKIP, TAG_MORE) are treated as TAG_END.  The full range of
  886.        TAG list operations are permitted under 2.0.
  887.  
  888.        This function MUST be called by a Process (not a Task).  It makes a
  889.        few DOS calls.
  890.  
  891.        Don't call WaitMidi() with a MidiNode that has no ReceiveSignal.
  892.  
  893.    EXAMPLES
  894.        mi = SetMidiAttrs (mi,
  895.                MIDI_MsgQueue, 2048, MIDI_SysExSize, 10000L, TAG_END);
  896.  
  897.        Modifies a MidiNode to have space to receive 2048 MidiMsg's and 10000
  898.        bytes of Sys/Ex data.  Note the 'L' on the end of 10000.  This
  899.        forces correct alignment of the tag items on the stack for 16 bit
  900.        integer compilation.
  901.  
  902.    SEE ALSO
  903.        CreateMidi(), DeleteMidi()
  904.        2.0 tag docs.
  905. camd.library/SetMidiLinkAttrs                     camd.library/SetMidiLinkAttrs
  906.  
  907.    NAME
  908.        SetMidiLinkAttrs -- Set the attributes of a MidiNode
  909.  
  910.    SYNOPSIS
  911.        BOOL SetMidiLinkAttrsA (struct MidiLink *ml, struct TagItem *tags)
  912.                                        a0          a1
  913.  
  914.        BOOL SetMidiLinkAttrs (struct MidiLink *mi, Tag type1, ...)
  915.  
  916.    FUNCTION
  917.        Sets the attributes of a MidiLink, using a Tag List.
  918.  
  919.        The first form of the function expects a tag array pointer or NULL.
  920.        The second form permits the tag items to exist on the caller's
  921.        stack.  In both cases, the final tag item must be TAG_END.
  922.  
  923.    INPUTS
  924.        ml - a pointer to the MidiLink
  925.  
  926.        TagList   - optional pointer to tag array.  May be NULL.  For
  927.                    OS v1.3, there are restrictions on the tag array
  928.                    contents.  See NOTE below.
  929.  
  930.    TAGS
  931.        MLINK_Name         STRPTR - ti_Data points to the new name of
  932.                              the node
  933.  
  934.        MLINK_Location     STRPTR - ti_Data points to name of MidiCluster
  935.                               to link with
  936.  
  937.         MLINK_ChannelMask  UWORD - ti_Data contains mask of which MIDI
  938.                               channels to listen for (defaults to ~0)
  939.  
  940.         MLINK_EventMask    UWORD - ti_Data contains mask of which types
  941.                               of MIDI events to listen for (defaults to ~0)
  942.  
  943.         MLINK_UserData     CPTR - ti_Data points to user definable data
  944.  
  945.         MLINK_Comment      STRPTR - ti_Data points to a comment string. The
  946.                               highest priority MidiLink in a MidiCluster
  947.                               has its comment field copied to the
  948.                               MidiCluster's comment field
  949.  
  950.         MLINK_PortID       UBYTE - ti_Data contains value to copy into any
  951.                               MidiMsg's arriving at MidiNode through this
  952.                               MidiLink (defaults to 0)
  953.  
  954.         MLINK_Private      BOOL - if ti_Data contains TRUE, then this link
  955.                               requests to not be shown by patch editors, etc.
  956.  
  957.         MLINK_Priority     BYTE - ti_Data contains priotity of the MidiLink
  958.  
  959.         MLINK_SysExFilter  ULONG - ti_Data contains three 1-byte manufacturor
  960.                               numbers to filter SysEx messages with
  961.  
  962.         MLINK_SysExFilterX ULONG - ti_Data contains one 3-byte manufacturor
  963.                               number to filter SysEx messages with
  964.  
  965.         MLINK_Parse        BOOL - if ti_Data contains true, allocate a parser
  966.                               for the MidiLink so raw MIDI streams can be
  967.                               sent though the link
  968.  
  969.         MLINK_ErrorCode    ULONG * - ti_Data points to an error code buffer
  970.  
  971.    RESULTS
  972.        TRUE if all changes were made successfully or FALSE on failure.
  973.        When FALSE is returned, an error code will be returned if a TagItem
  974.         with an ti_Tag of MLINK_ErrorCode was provided. The CME_ error code
  975.         will be put in the ti_Data field.
  976.  
  977.    NOTE
  978.        Under 1.3 only a restricted tag array may be passed into this
  979.        funciton. Specifically, the only special tag values that are
  980.        supported are TAG_END (or TAG_DONE) and TAG_IGNORE.  All others
  981.        (e.g. TAG_SKIP, TAG_MORE) are treated as TAG_END.  The full range of
  982.        TAG list operations are permitted under 2.0.
  983.  
  984.    EXAMPLES
  985.        mi = SetMidiLinkAttrs (ml,
  986.                MLINK_Location, "out.0", MLINK_Priority, -5L, TAG_END);
  987.  
  988.        Modifies a MidiLink so it will be connected to the MidiCluster named
  989.         "out.0" and makes the MidiLink's priority -5. Note the 'L' on the end
  990.         of -5. This forces correct alignment of the tag items on the stack
  991.         for 16 bit integer compilation.
  992.  
  993.    SEE ALSO
  994.        AddMidiLink(), RemoveMidiLink()
  995.        2.0 tag docs.
  996. camd.library/SkipSysEx                                   camd.library/SkipSysEx
  997.  
  998.    NAME
  999.        SkipSysEx -- Skip the next sys/ex message in the Sys/Ex buffer.
  1000.  
  1001.    SYNOPSIS
  1002.        void SkipSysEx (struct MidiNode *mn)
  1003.                               a0
  1004.  
  1005.    FUNCTION
  1006.        Skips the remaining bytes of the current sys/ex message.  Nothing
  1007.        happens if the last message read from GetMidi() wasn't a sys/ex
  1008.        message.
  1009.  
  1010.    INPUTS
  1011.        mn - Pointer to MidiNode.
  1012.  
  1013.    RESULTS
  1014.        None.
  1015.  
  1016.    SEE ALSO
  1017.        GetSysEx()
  1018. camd.library/StartClusterNotify                 camd.library/StartClusterNotify
  1019.  
  1020.    NAME
  1021.        StartClusterNotify -- Notify task of cluster changes
  1022.  
  1023.    SYNOPSIS
  1024.        void StartClusterNotify (struct ClusterNotifyNode *cn)
  1025.                                        a0
  1026.  
  1027.    FUNCTION
  1028.                 Allow an external task to receive notification via a signal tha
  1029. t
  1030.                 CAMD's internal state has changed. This function is mostly usef
  1031. ul
  1032.                 to patch editors, etc.
  1033.  
  1034.    INPUTS
  1035.        cn - a pointer to a ClusterNotifyNode
  1036.  
  1037.    RESULTS
  1038.        None
  1039.  
  1040.    EXAMPLES
  1041.  
  1042.                 struct ClusterNotifyNode cnn;
  1043.  
  1044.                 cnn.cnn_Task = FindTask(NULL);
  1045.                 cnn.cnn_SigBit = AllocSignal(-1);
  1046.        StartCluserNotify(&cnn);
  1047.  
  1048.                 /* later in code */
  1049.  
  1050.                 Wait(1 << cnn.cnn_SigBit);
  1051.  
  1052.                 /* someone changed the state of a cluster */
  1053.  
  1054.    SEE ALSO
  1055.        EndClusterNotify
  1056. camd.library/UnlockCAMD                                 camd.library/UnlockCAMD
  1057.  
  1058.    NAME
  1059.        UnlockCAMD -- Unlock internal lists
  1060.  
  1061.    SYNOPSIS
  1062.        UnlockCAMD(lock)
  1063.                    a0
  1064.        void UnlockCAMD( APTR );
  1065.  
  1066.    FUNCTION
  1067.        Undoes the effects of LockCAMD().
  1068.  
  1069.    INPUTS
  1070.        lock -- value returned by LockCAMD(). Can be NULL.
  1071.  
  1072.    EXAMPLE
  1073.  
  1074.    SEE ALSO
  1075.        LockCAMD()
  1076.  
  1077. camd.library/WaitMidi                                     camd.library/WaitMidi
  1078.  
  1079.    NAME
  1080.        WaitMidi -- Wait for next MidiMsg and get it.
  1081.  
  1082.    SYNOPSIS
  1083.        BOOL WaitMidi (struct MidiNode *mn, MidiMsg *msg)
  1084.                               a0                 a1
  1085.  
  1086.    FUNCTION
  1087.        Waits for the next MidiMsg to arrive at the MidiNode.  On reception,
  1088.        the MidiMsg is removed and copied to the supplied buffer.
  1089.  
  1090.        WaitMidi() first checks for errors detected at the MidiNode.  If
  1091.        none are detected, GetMidi() is called.  If the buffer was empty,
  1092.        Wait() is called until the MidiNode is signalled.  Once the signal
  1093.        arrives, this process is repeated.
  1094.  
  1095.    INPUTS
  1096.        mn  - pointer to MidiNode.
  1097.        msg - pointer to buffer to place MidiMsg removed from queue.
  1098.  
  1099.    RESULTS
  1100.        TRUE if a MidiMsg was received.  FALSE if an error was detected.
  1101.  
  1102.    SEE ALSO
  1103.        GetMidi()
  1104.